#include "Palette.h"

#include <cstring>
using std::memset;

#include "../../../base.h"

/*
	Palette
*/

/*	public	*/

Palette::Palette() {
	/* _indexToColor */
	_indexToColor = new Color*[PALETTE_INDEX_MAX];
	memset(_indexToColor, 0, PALETTE_INDEX_MAX * sizeof(Color*));

	/* _valueToIndex */
	_valueToIndex = new int[PALETTE_VALUE_MAX];
	memset(_valueToIndex, 0, PALETTE_VALUE_MAX * sizeof(int));
}

Palette::~Palette() {
	delete[] _indexToColor;
	delete[] _valueToIndex;
}

void Palette::setColor(int index, Color const& color) {

	if (_indexToColor[index] != 0) {
		delete _indexToColor[index];
	}

	_indexToColor[index] = new Color(color);
}

//	/* look-up index */
//	hash_map<int, Color*>::iterator it = _indexToColor.find(index);
//
//	if (it == _indexToColor.end()) {
//		/* index not present */
//		_indexToColor[index] = new Color(color);
//	} else {
//		/* index already present  */ 
//		/* replace existing color */
//		delete it->second;
//		it->second = new Color(color);
//	}

void Palette::setMappingFromTo(int value, int index) {
	_valueToIndex[value] = index;
}

//	/* look-up index */
//	hash_map<int, int>::const_iterator iti = _valueToIndex.find(value);
//	assert(iti != _valueToIndex.end());
//	int index = iti->second;
//
//	/* look-up color */
//	hash_map<int, Color*>::const_iterator itc = _indexToColor.find(index);
//	assert(itc != _indexToColor.end());
//
//	return *(itc->second);

//void Palette::updateCache() {
//	if (_cache != 0) {
//		/* we already have a cache */
//	} else {
//		/* initial caching */
//		_valueToIndex
//	}
//
//}
